package domain;

import constants.Constants;

public class BioRecord {
	private double abort[] = new double[Constants.MPREG+1];  			//risk of abortion of pregnant cow
	private int analysis;     											//type of results with mkv
	private double bw[][][] = new double[Constants.LACT+1]
		 [Constants.MIM+1][Constants.MPREG+1];							//body weight
	private double bwpreg[][] = new double [2+1][Constants.MPREG+1];	//pregnancy effect on bodyweight
	private double concabs;												//absolute increase in conception rate
	private double conceptionrate[][][] = new double[Constants.LACT+1]
		 [Constants.MIM+1][Constants.SEA+1];							//actual conception rate
	private double concmim[] = new double[Constants.MIM+1];				//conception rate per mim
	private double concsea[] = new double[Constants.SEA+1];				//conception rate per season
	private double concseapct;											//pct conception rate seasonality
	private double cullabs;
	private double cullmargin;											//open cow culled if margin < cullmargin
	private double cullmilk;											//open cow culled if milk yield < cullmilk
	private double cullpct;
	private double cullseapct;
	private double dmi[][][][][] = new double[Constants.CURR+1][Constants.LACT+1][Constants.MIM+1]
		 [Constants.MPREG+1][Constants.SEA+1];							//dmi cows
	private double dmi_dry;												//dry matter intake dry cows (/cow/day)
	// unsigned short drypreg;											//1-7=months dry, 8=let model decide (1-7)
	private int enter[] = new int[2*Constants.SEA+1];					//enter heifer: 0=delay, 1=buy, 8=DP determines
	private int funk;													//0 = no effect previous days open on milk yield, 1 = effect
	private double heatabs;												//absolute increase in heat detection rate
	private double heatdetectionrate[][] = new double[Constants.MIM+1]
		 [Constants.SEA+1];												//actual heat detection rate
	private double heatsea[] = new double[Constants.SEA+1];				//heat detection rate per season (100% seasonality, 0 abs)
	private double heatseapct;											//pct heat detection seasonality
	private int hi[][][][] = new int[Constants.CURR+1][Constants.LACT+1]
		 [Constants.MIM+1][Constants.SEA+1];							//highest next level with meaningfull transition probabilities
	private double interest;											//annual interest
	private double invcullpct;											//price of involuntary culled cow compared to voluntary culled cow
	private double iofc[][][][][] = new double[Constants.CURR+1][Constants.LACT+1][Constants.MIM+1]
		 [Constants.MPREG+1][2*Constants.SEA+1];						//income over feed cost
	// private double laborcostcows[MIM+1][MPREG+1];					//labor cost fresh,lactating,dry cows (cow/month)
	// private double laborcostheat[MIM+1];								//labor cost heat detection + fertility drug (cow/month)
	// private double laborcostbreeding;								//labor cost breeding (cow/insemination)
	private int lbm;													//last breeding month (<= 15)
	private int lo[][][][] = new int[Constants.CURR+1][Constants.LACT+1]
		 [Constants.MIM+1][Constants.SEA+1];							//lowest next level with meaningfull transition probabilities
	// private double margin[CUR+1][LAC+1][WIM+1][WPR+1][SEA+1];		//margin = "rev" = variable income - variable cost

	private double m305[][][] = new double[Constants.CURR+1][Constants.LACT+1]
		 [Constants.SEA+1];												//cumulative prediced 305-d milk when mim = 1 
	private int maxlact;												//maximum number of lactations
	private int maxmim;													//open cows culled after this month (maxmim <= MIM)
	private double milk_mpreg[] = new double[Constants.MPREG+1];		//reduction in milk yield due to pregnancy
	private double milkabs[] = new double[3+1];
	private double milkpct[] = new double[3+1];
	private double milkseapct;
	private double milkyield[][][][][] = new double[Constants.CURR+1][Constants.LACT+1][Constants.MIM+1]
		 [Constants.MPREG+1][Constants.SEA+1];							//milk yield
	private double milkrepeat;											//repeatability of milk
	private double p_bodyweight[] = new double[2*Constants.SEA+1];		//price body weight
	private double p_calf;												//price calf ($/calf)
	private double p_fixed_labor;										//daily fixed labor cost
	private double p_fixed_other;										//daily fixed other cost
	private double p_heifer[] = new double[2*Constants.SEA+1];			//price + premium on price springing heifer just before calving
	private double p_labor;												//price labor / hour
	private double p_loss;												//price additional cost involuntary culling
	private double p_milk[] = new double[2*Constants.SEA+1];			//price of milk
	private double p_other_dry;											//other variable cost, dry cows
	private double p_other_lact;										//other variable cost, lactating cows
	private double p_semen;												//price of an AI service/embryo
	private double p_tmrdmdry;											//price total mixed ration dry matter dry cows
	private double p_tmrdmlac;											//price total mixed ration dry matter lactating cows
	private double pa_cv;												//coefficient of variation of producing ability
	private double pctfat;												//percent fat
	private double pind[][][] = new double[Constants.LACT+1][Constants.MIM+1]
		 [Constants.SEA+1];												//P(involuntary culling per lactation per month)
	private double pnext[][][][][] = new double[Constants.CURR+1][Constants.LACT+1][Constants.MIM+1]
		 [Constants.SEA+1][Constants.CURR+1];							//Pr(next | curr,lact,mim,sea)
	private int policy;													//type of replacement/insemination policy
	// private double prob0[CURR+1];   									//P(expected milk level) for heifers
	// private double prob21[CURR+1][CURR+1];   						//P(expected milk level | current level) lactation 1 --> 2
	// private double prob32[CURR+1][CURR+1];   						//P(expected milk level | current level) lactation 2 --> etc
	private double rev[][][][][] = new double[Constants.CURR+1][Constants.LACT+1][Constants.MIM+1]
		 [Constants.MPREG+1][2*Constants.SEA+1];						//milk - feed - vet - work
	private double reprocost[][] = new double[Constants.MIM+1]
		 [Constants.SEA+1];												//extra reproduction cost per open cow per month.
	private double sel[][][] = new double[Constants.LACT+1]
		 [Constants.MIM+1][2*Constants.SEA+1];							//sell cows
	private int serve[] = new int[2*Constants.SEA+1];					//DP:1=always serv, 0=DP determines keep or serv
	private double smy[] = new double[Constants.CURR+1];				//predicted standardized milk weight per level
	private int start_sea;												//first month of simulation
	private double timecows[][][][][] = new double[Constants.CURR+1][Constants.LACT+1][Constants.MIM+1]
		 [Constants.MPREG+1][Constants.SEA+1];
	private double timefresh;											//minutes/month for mim = 1 cows
	private double timelact;											//minutes/month for lactating cows
	private double timedry;												//minutes/month for dry cows
	private double timebreeding;										//minutes/month for inseminations
	// private double timeheat[MIM+1];									//minutes/month for heatdetection or drug administration
	private int unit;													//1=kg, 0=lbs
	private double varcost[][][][][] = new double[Constants.CURR+1][Constants.LACT+1][Constants.MIM+1]
		 [Constants.MPREG+1][2*Constants.SEA+1];
	private double vetcost[] = new double[Constants.MIM+1];				//veterinary cost
	private int vwp[] = new int[3+1];									//voluntery waiting period (months: 2=60 days, 3 = 90 days)
	private int writepol;												//1=write_pol_file()
	private int writerpo;												//1=write_rpo_file()
	
	
	public double[] getAbort() {
		return abort;
	}
	public void setAbort(double[] abort) {
		this.abort = abort;
	}
	public int getAnalysis() {
		return analysis;
	}
	public void setAnalysis(int analysis) {
		this.analysis = analysis;
	}
	public double[][][] getBw() {
		return bw;
	}
	public void setBw(double[][][] bw) {
		this.bw = bw;
	}
	public double[][] getBwpreg() {
		return bwpreg;
	}
	public void setBwpreg(double[][] bwpreg) {
		this.bwpreg = bwpreg;
	}
	public double getConcabs() {
		return concabs;
	}
	public void setConcabs(double concabs) {
		this.concabs = concabs;
	}
	public double[][][] getConceptionrate() {
		return conceptionrate;
	}
	public void setConceptionrate(double[][][] conceptionrate) {
		this.conceptionrate = conceptionrate;
	}
	public double[] getConcmim() {
		return concmim;
	}
	public void setConcmim(double[] concmim) {
		this.concmim = concmim;
	}
	public double[] getConcsea() {
		return concsea;
	}
	public void setConcsea(double[] concsea) {
		this.concsea = concsea;
	}
	public double getConcseapct() {
		return concseapct;
	}
	public void setConcseapct(double concseapct) {
		this.concseapct = concseapct;
	}
	public double getCullabs() {
		return cullabs;
	}
	public void setCullabs(double cullabs) {
		this.cullabs = cullabs;
	}
	public double getCullmargin() {
		return cullmargin;
	}
	public void setCullmargin(double cullmargin) {
		this.cullmargin = cullmargin;
	}
	public double getCullmilk() {
		return cullmilk;
	}
	public void setCullmilk(double cullmilk) {
		this.cullmilk = cullmilk;
	}
	public double getCullpct() {
		return cullpct;
	}
	public void setCullpct(double cullpct) {
		this.cullpct = cullpct;
	}
	public double getCullseapct() {
		return cullseapct;
	}
	public void setCullseapct(double cullseapct) {
		this.cullseapct = cullseapct;
	}
	public double[][][][][] getDmi() {
		return dmi;
	}
	public void setDmi(double[][][][][] dmi) {
		this.dmi = dmi;
	}
	public double getDmi_dry() {
		return dmi_dry;
	}
	public void setDmi_dry(double dmi_dry) {
		this.dmi_dry = dmi_dry;
	}
	public int[] getEnter() {
		return enter;
	}
	public void setEnter(int[] enter) {
		this.enter = enter;
	}
	public int getFunk() {
		return funk;
	}
	public void setFunk(int funk) {
		this.funk = funk;
	}
	public double getHeatabs() {
		return heatabs;
	}
	public void setHeatabs(double heatabs) {
		this.heatabs = heatabs;
	}
	public double[][] getHeatdetectionrate() {
		return heatdetectionrate;
	}
	public void setHeatdetectionrate(double[][] heatdetectionrate) {
		this.heatdetectionrate = heatdetectionrate;
	}
	public double[] getHeatsea() {
		return heatsea;
	}
	public void setHeatsea(double[] heatsea) {
		this.heatsea = heatsea;
	}
	public double getHeatseapct() {
		return heatseapct;
	}
	public void setHeatseapct(double heatseapct) {
		this.heatseapct = heatseapct;
	}
	public int[][][][] getHi() {
		return hi;
	}
	public void setHi(int[][][][] hi) {
		this.hi = hi;
	}
	public double getInterest() {
		return interest;
	}
	public void setInterest(double interest) {
		this.interest = interest;
	}
	public double getInvcullpct() {
		return invcullpct;
	}
	public void setInvcullpct(double invcullpct) {
		this.invcullpct = invcullpct;
	}
	public double[][][][][] getIofc() {
		return iofc;
	}
	public void setIofc(double[][][][][] iofc) {
		this.iofc = iofc;
	}
	public int getLbm() {
		return lbm;
	}
	public void setLbm(int lbm) {
		this.lbm = lbm;
	}
	public int[][][][] getLo() {
		return lo;
	}
	public void setLo(int[][][][] lo) {
		this.lo = lo;
	}
	public double[][][] getM305() {
		return m305;
	}
	public void setM305(double[][][] m305) {
		this.m305 = m305;
	}
	public int getMaxlact() {
		return maxlact;
	}
	public void setMaxlact(int maxlact) {
		this.maxlact = maxlact;
	}
	public int getMaxmim() {
		return maxmim;
	}
	public void setMaxmim(int maxmim) {
		this.maxmim = maxmim;
	}
	public double[] getMilk_mpreg() {
		return milk_mpreg;
	}
	public void setMilk_mpreg(double[] milk_mpreg) {
		this.milk_mpreg = milk_mpreg;
	}
	public double[] getMilkabs() {
		return milkabs;
	}
	public void setMilkabs(double[] milkabs) {
		this.milkabs = milkabs;
	}
	public double[] getMilkpct() {
		return milkpct;
	}
	public void setMilkpct(double[] milkpct) {
		this.milkpct = milkpct;
	}
	public double getMilkseapct() {
		return milkseapct;
	}
	public void setMilkseapct(double milkseapct) {
		this.milkseapct = milkseapct;
	}
	public double[][][][][] getMilkyield() {
		return milkyield;
	}
	public void setMilkyield(double[][][][][] milkyield) {
		this.milkyield = milkyield;
	}
	public double getMilkrepeat() {
		return milkrepeat;
	}
	public void setMilkrepeat(double milkrepeat) {
		this.milkrepeat = milkrepeat;
	}
	public double[] getP_bodyweight() {
		return p_bodyweight;
	}
	public void setP_bodyweight(double[] p_bodyweight) {
		this.p_bodyweight = p_bodyweight;
	}
	public double getP_calf() {
		return p_calf;
	}
	public void setP_calf(double p_calf) {
		this.p_calf = p_calf;
	}
	public double getP_fixed_labor() {
		return p_fixed_labor;
	}
	public void setP_fixed_labor(double p_fixed_labor) {
		this.p_fixed_labor = p_fixed_labor;
	}
	public double getP_fixed_other() {
		return p_fixed_other;
	}
	public void setP_fixed_other(double p_fixed_other) {
		this.p_fixed_other = p_fixed_other;
	}
	public double[] getP_heifer() {
		return p_heifer;
	}
	public void setP_heifer(double[] p_heifer) {
		this.p_heifer = p_heifer;
	}
	public double getP_labor() {
		return p_labor;
	}
	public void setP_labor(double p_labor) {
		this.p_labor = p_labor;
	}
	public double getP_loss() {
		return p_loss;
	}
	public void setP_loss(double p_loss) {
		this.p_loss = p_loss;
	}
	public double[] getP_milk() {
		return p_milk;
	}
	public void setP_milk(double[] p_milk) {
		this.p_milk = p_milk;
	}
	public double getP_other_dry() {
		return p_other_dry;
	}
	public void setP_other_dry(double p_other_dry) {
		this.p_other_dry = p_other_dry;
	}
	public double getP_other_lact() {
		return p_other_lact;
	}
	public void setP_other_lact(double p_other_lact) {
		this.p_other_lact = p_other_lact;
	}
	public double getP_semen() {
		return p_semen;
	}
	public void setP_semen(double p_semen) {
		this.p_semen = p_semen;
	}
	public double getP_tmrdmdry() {
		return p_tmrdmdry;
	}
	public void setP_tmrdmdry(double p_tmrdmdry) {
		this.p_tmrdmdry = p_tmrdmdry;
	}
	public double getP_tmrdmlac() {
		return p_tmrdmlac;
	}
	public void setP_tmrdmlac(double p_tmrdmlac) {
		this.p_tmrdmlac = p_tmrdmlac;
	}
	public double getPa_cv() {
		return pa_cv;
	}
	public void setPa_cv(double pa_cv) {
		this.pa_cv = pa_cv;
	}
	public double getPctfat() {
		return pctfat;
	}
	public void setPctfat(double pctfat) {
		this.pctfat = pctfat;
	}
	public double[][][] getPind() {
		return pind;
	}
	public void setPind(double[][][] pind) {
		this.pind = pind;
	}
	public double[][][][][] getPnext() {
		return pnext;
	}
	public void setPnext(double[][][][][] pnext) {
		this.pnext = pnext;
	}
	public int getPolicy() {
		return policy;
	}
	public void setPolicy(int policy) {
		this.policy = policy;
	}
	public double[][][][][] getRev() {
		return rev;
	}
	public void setRev(double[][][][][] rev) {
		this.rev = rev;
	}
	public double[][] getReprocost() {
		return reprocost;
	}
	public void setReprocost(double[][] reprocost) {
		this.reprocost = reprocost;
	}
	public double[][][] getSel() {
		return sel;
	}
	public void setSel(double[][][] sel) {
		this.sel = sel;
	}
	public int[] getServe() {
		return serve;
	}
	public void setServe(int[] serve) {
		this.serve = serve;
	}
	public double[] getSmy() {
		return smy;
	}
	public void setSmy(double[] smy) {
		this.smy = smy;
	}
	public int getStart_sea() {
		return start_sea;
	}
	public void setStart_sea(int start_sea) {
		this.start_sea = start_sea;
	}
	public double[][][][][] getTimecows() {
		return timecows;
	}
	public void setTimecows(double[][][][][] timecows) {
		this.timecows = timecows;
	}
	public double getTimefresh() {
		return timefresh;
	}
	public void setTimefresh(double timefresh) {
		this.timefresh = timefresh;
	}
	public double getTimelact() {
		return timelact;
	}
	public void setTimelact(double timelact) {
		this.timelact = timelact;
	}
	public double getTimedry() {
		return timedry;
	}
	public void setTimedry(double timedry) {
		this.timedry = timedry;
	}
	public double getTimebreeding() {
		return timebreeding;
	}
	public void setTimebreeding(double timebreeding) {
		this.timebreeding = timebreeding;
	}
	public int getUnit() {
		return unit;
	}
	public void setUnit(int unit) {
		this.unit = unit;
	}
	public double[][][][][] getVarcost() {
		return varcost;
	}
	public void setVarcost(double[][][][][] varcost) {
		this.varcost = varcost;
	}
	public double[] getVetcost() {
		return vetcost;
	}
	public void setVetcost(double[] vetcost) {
		this.vetcost = vetcost;
	}
	public int[] getVwp() {
		return vwp;
	}
	public void setVwp(int[] vwp) {
		this.vwp = vwp;
	}
	public int getWritepol() {
		return writepol;
	}
	public void setWritepol(int writepol) {
		this.writepol = writepol;
	}
	public int getWriterpo() {
		return writerpo;
	}
	public void setWriterpo(int writerpo) {
		this.writerpo = writerpo;
	}
	
}
